package gek.uni.diplom.ocl.example.visitors;

import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EParameter;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.ocl.ecore.CallOperationAction;
import org.eclipse.ocl.ecore.Constraint;
import org.eclipse.ocl.ecore.SendSignalAction;

/**
 * Утилитный класс, который разбивает логическое выражение на различные варианты
 * решения его частей, так, чтобы результирующее выражение возвращало true или
 * false. <br/>
 * 
 * Результатом этого посетителя будет массив списков списков OCL выражений. <br/>
 * 
 * По нулевому индексу результирующего массива можно обратится к списку списков
 * OperationCallExpression'ов типа Boolean, выполнение каждого из которых
 * гарантирует, что результат будет равен true.<br/>
 * По индексу 1 результирующего массива можно обратится к списку списков
 * OperationCallExpression'ов типа Boolean, выполнение каждого из которых
 * гарантирует, что результат будет равен false.<br/>
 * 
 * Так как значение true или false может быть достигнута различными способами,
 * то возвращается массив СПИСКОВ списков OperationCallExpression'ов. Каждый
 * список в этом СПИСКЕ содержит выражения, выполнение которых гарантирует
 * определенное значение результата.<br/>
 * 
 * 
 * 
 * @author arkady
 * 
 * @param <C>
 * @param <O>
 * @param <P>
 * @param <EL>
 * @param <PM>
 * @param <S>
 * @param <COA>
 * @param <SSA>
 * @param <CT>
 */
public class EcoreTrueFalseUtils extends TrueFalseUtils<EClassifier, EOperation, EStructuralFeature, EEnumLiteral, EParameter, EObject, CallOperationAction, SendSignalAction, Constraint> {

}
